package br.unicamp.ic.inf300.arena.persistencia.dao.impl;

import java.util.Date;

import br.unicamp.ic.inf300.arena.modelo.pessoa.Pessoa;
import br.unicamp.ic.inf300.arena.modelo.pessoa.TipoPessoa;
import br.unicamp.ic.inf300.arena.persistencia.dao.IPessoaDAO;
import br.unicamp.ic.inf300.framework.persistencia.SQLUtil;

public class PessoaDAOHsql implements IPessoaDAO {

	public Pessoa inserir(String nome, String documento, Date dataNascimento, TipoPessoa tipoPessoa) {
		try {
			Pessoa pessoa = null;
			String query = new String(" INSERT INTO " + IPessoaDAO.TABELA_BD + " (nome, documento, datanascimento, tipo) VALUES (?, ?, ?, ?) ");
			Object[] params = new Object[]{nome, documento, dataNascimento, tipoPessoa.getSequencial()};
			int result = SQLUtil.update(query, params);
			if (result == 1) {
				Object[] resultado = (Object[]) SQLUtil.selectARecord(" SELECT p.id FROM " + IPessoaDAO.TABELA_BD + " p WHERE nome = ? and tipo = ?", new Object[]{nome, tipoPessoa.getSequencial()});
				Integer id = (Integer) resultado[0];
				pessoa = new Pessoa(id, nome, documento, dataNascimento, tipoPessoa);
			}
			return pessoa;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public boolean atualizar(Integer id, String nome, String documento, Date dataNascimento, TipoPessoa tipoPessoa) {
		try {
			String query = new String(" UPDATE " + IPessoaDAO.TABELA_BD + " SET nome = ?, documento = ?, datanascimento = ?, tipo = ? WHERE id = ? ");
			Object[] params = new Object[]{nome, documento, dataNascimento, tipoPessoa.getSequencial(), id};
			int result = SQLUtil.update(query, params);
			return result == 1;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	public boolean remover(Integer id) {
		try {
			String query = new String(" DELETE FROM " + IPessoaDAO.TABELA_BD + " WHERE id = ? ");
			Object[] params = new Object[]{id};
			int result = SQLUtil.update(query, params);
			return result == 1;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
}